/*
 * TacticaAtaque01.java
 *
 * Created on 24 de marzo de 2007, 17:23
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package futbol.tacticas.concursantes2007;

import futbol.General;
import futbol.tacticas.*;
import futbol.tacticas.concursantes.Tactica;

import java.awt.Color;
import java.awt.Point;
import java.util.Vector;
/**
 *
 * @author Administrador
 */
public class TacticaAtaque01 implements Tactica{
    
    private int nValores[][]={
        {-152,0,4},
        {-100,100,4},
        {-120,30,4},
        {-120,-30,4},        
        {-100,-100,4},
        {20,100,4},
        {-20,30,4},
        {-20,-30,4},
        {20,-100,4},
        {120,-50,4},
        {120,5,4}  
    };

    public String getNombre(){
        return "Ataque01";
    }
    
    public Color getColor1(){
        return Color.blue;
    }
    
    public Color getColor2(){
        return Color.cyan;
    }
    
    public Color getColorNumero(){
        return Color.black;
    }
    
    public int getFuerza(int n){
        return nValores[n][2];
    }
    public int getXInicial(int n){
        return nValores[n][0];
    }
    
    public int getYInicial(int n){
        return nValores[n][1];
    }
    
    public Vector<Comando> getComandos(SituacionJugadores sj){
        Vector<Comando> comandos=new Vector();
        for (int n=0;n<11;n++)
            comandos.add(new ComandoIrA(n, nValores[n][0], nValores[n][1]));
        
        int nJug=sj.getMasCercanoDeBola();
        Point bola=sj.getBola();
        comandos.add(new ComandoIrA(nJug, bola.getX() , bola.getY()));
        
        Point jug[]=sj.getMisJugadores();
        Point ene[]=sj.getContrario();

        boolean bPuedeGolpear=true;
        int nDir[][]={{30,0},
                    {0,30},
                    {0,-30},
                    {-30,0}};
        int nDis=30;
        if (bPuedeGolpear && General.getDistancia(bola.getX(), bola.getY(), jug[nJug].getX(), jug[nJug].getY())<10)
            for (int n=0;n<nDir.length && bPuedeGolpear ;n++){
                double xN=corregirLateral(160,jug[nJug].getX()+nDir[n][0]);
                double yN=corregirLateral(120,jug[nJug].getY()+nDir[n][1]);
                int nJC= sj.getContrarioMasCerca(xN, yN);
                if (General.getDistancia(xN, yN, ene[nJC].getX(), ene[nJC].getY())>nDis){
                    comandos.add(new ComandoGolpearBola(nJug, xN, yN));
                    bPuedeGolpear=false;
                }
            }
    
        if (bPuedeGolpear && General.getDistancia(bola.getX(), bola.getY(), jug[nJug].getX(), jug[nJug].getY())<10){
            comandos.add(new ComandoGolpearBola(nJug, bola.getX()+40, bola.getY()));
        }
            
        return comandos;
    }
    
    public double corregirLateral(double limite, double x){
        if (x>limite) return limite*2-x;
        if (x<-limite) return -limite*2-x;
        return x;
    }
}
